﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using BussinessLogicTecnoPez.Tipos_Comunes;
using Tecnopez.Globals;
using Microsoft.Practices.EnterpriseLibrary.Validation;


public partial class Modules_EnfermedadesControlEstanque_ABMEmpleados : System.Web.UI.Page
{
    private GridView grdEmpleados;
    protected void Page_Load(object sender, EventArgs e)
    {
        grdEmpleados = TecnopezDataGRIDABMView1.grdDatosAbmView;
        if (IsPostBack == false)
        {
            SetMode(PageMode.ListMode);
        }

        InicializarValidadores();
        InicializarGrilla();

        cmdEliminar.Attributes.Add("onClick", "return confirm('Esta seguro de eliminar el registro?');");

        TPPTipoDocumento.ObjType = typeof(TipoDocumento);
        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/empleados.gif";
        master.Titulo = "Gestión de empleados";
        cargarGrilla();
        _lblError.Text = "";
    }

    private void InicializarValidadores()
    {
        PPVNombre.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques.Empleado";
        PPVNombre.ControlToValidate = "txtNombre";
        PPVNombre.PropertyName = "Nombre";
        PPVNombre.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVApellido.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques.Empleado";
        PPVApellido.ControlToValidate = "txtApellido";
        PPVApellido.PropertyName = "Apellido";
        PPVApellido.DisplayMode = ValidationSummaryDisplayMode.List;

        PPVLegajo.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques.Empleado";
        PPVLegajo.ControlToValidate = "txtLegajo";
        PPVLegajo.PropertyName = "Legajo";
        PPVLegajo.DisplayMode = ValidationSummaryDisplayMode.List;
    }
    
    private void cargarGrilla()
    {
        Empleado.getManager.ClearFilters();
        Empleado.getManager.ClearOrders();
        Empleado.getManager.AddFilter("NOMBRE", GenericManager<Empleado>.filterOperator.Like, "%" + txtBuscarNombre.Text.Trim() + "%");
        Empleado.getManager.AddFilter("APELLIDO", GenericManager<Empleado>.filterOperator.Like, "%" + txtBuscarApellido.Text.Trim() + "%");
        if (!chkEstado.Items[0].Selected)
        {
            Empleado.getManager.AddFilter("FECHABAJA", GenericManager<Empleado>.filterOperator.Distinct, DateTime.MinValue);
        }

        if (!chkEstado.Items[1].Selected)
        {
            Empleado.getManager.AddFilter("FECHABAJA", GenericManager<Empleado>.filterOperator.Equals, DateTime.MinValue);
        }

        if (txtBuscarDocumento.Text != "")
        {
            Empleado.getManager.AddFilter("NUMERODOCUMENTO", GenericManager<Empleado>.filterOperator.Equals, txtBuscarDocumento.Text.Trim());
        }

        if (ViewState["orden"] == null)
        {
            Empleado.getManager.AddOrder("IDEMPLEADO", GenericManager<Empleado>.Order.orderDirection.DESC);
        }
        else
        {
            Empleado.getManager.AddOrder(ViewState["orden"].ToString(), (GenericManager<Empleado>.Order.orderDirection)ViewState["ordenDireccion"]);

        }

        List<Empleado> lista = new List<Empleado>();
        lista = Empleado.getManager.GetFilter();
        grdEmpleados.DataSource = lista;
        grdEmpleados.DataBind();
    }

    private void seleccionarEmpleado(int o)
    {
        cargarGrilla();
        int IdEmpleado = int.Parse(grdEmpleados.DataKeys[o].Value.ToString());
        Empleado.getManager.ClearFilters();
        Empleado.getManager.AddFilter("IdEmpleado", BussinessLogicTecnoPez.GenericManager<Empleado>.filterOperator.Equals, IdEmpleado);
        Empleado auxEmpleado = Empleado.getManager.GetOne();
        txtID.Text = auxEmpleado.IdEmpleado.ToString();
        txtNombre.Text = auxEmpleado.Nombre.Trim();
        txtApellido.Text = auxEmpleado.Apellido.Trim();
        if(auxEmpleado.CorreoElectronico!=null)
            txtCorreoElectronico.Text = auxEmpleado.CorreoElectronico.Trim();
        if(auxEmpleado.Direccion!=null)
            txtDireccion.Text = auxEmpleado.Direccion.Trim();
        if (auxEmpleado.FechaBaja == DateTime.MinValue)
        {
            txtFechaBaja.Text = "";
        }
        else
        {
            txtFechaBaja.Text = auxEmpleado.FechaBaja.ToShortDateString();
        }
        txtLegajo.Text = auxEmpleado.Legajo.Trim();
        txtNumeroDocumento.Text = auxEmpleado.NumeroDocumento.Trim();
        if(auxEmpleado.Telefono!=null)
            txtTelefono.Text = auxEmpleado.Telefono.Trim();
        TPPTipoDocumento.ItemSelected = auxEmpleado.TipoDocumento;
        SetMode(PageMode.ViewMode);
    }

    //private void configurarGrilla()
    //{
    //    grdEmpleados.AutoGenerateColumns = false;
    //    grdEmpleados.AllowPaging = true;

    //    grdEmpleados.PageSize = 10;
    //    grdEmpleados.PagerSettings.Mode = PagerButtons.NextPrevious;
    //    grdEmpleados.PagerSettings.NextPageText = "Siguiente";
    //    grdEmpleados.PagerSettings.PreviousPageText = "Anterior";

    //    grdEmpleados.AllowSorting = true;


    //    BoundField col = new BoundField();
    //    col.DataField = "idEmpleado";
    //    col.HeaderText = "Código";
    //    col.SortExpression = "idEmpleado";
    //    grdEmpleados.Columns.Add(col);

    //    col = new BoundField();
    //    col.DataField = "Nombre";
    //    col.HeaderText = "Nombre";
    //    col.SortExpression = "Nombre";
    //    grdEmpleados.Columns.Add(col);

    //    col = new BoundField();
    //    col.DataField = "Apellido";
    //    col.HeaderText = "Apellido";
    //    col.SortExpression = "Apellido";
    //    grdEmpleados.Columns.Add(col);

    //    ButtonField colC = new ButtonField();
    //    colC.ButtonType = ButtonType.Image;
    //    colC.ImageUrl = "../../Styles/Icons/email.gif";
    //    colC.CommandName = "mail";
    //    colC.HeaderText = "Email";
    //    grdEmpleados.Columns.Add(colC);

    //    ImageField colD = new ImageField();
    //    colD.DataImageUrlField = "FechaBaja";
    //    colD.HeaderText = "Estado";
    //    colC.CommandName = "mail";
    //    grdEmpleados.Columns.Add(colD);

    //    ButtonField colB = new ButtonField();
    //    colB.ButtonType = ButtonType.Image;
    //    colB.ImageUrl = "../../Styles/Icons/email.gif";
    //    colB.Text = "ver";
    //    colB.CommandName = "ver";
    //    grdEmpleados.Columns.Add(colB);

    //    grdEmpleados.DataKeyNames = new string[] { "IdEmpleado" };
    //}

    protected void grdEmpleados_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "ver")
        {
            //int o = int.Parse(e.CommandArgument.ToString());
            //cargarGrilla();
            //int IdEmpleado = int.Parse(grdEmpleados.DataKeys[o].Value.ToString());
            //Empleado.getManager.ClearFilters();
            //Empleado.getManager.AddFilter("IdEmpleado", BussinessLogicTecnoPez.GenericManager<Empleado>.filterOperator.Equals, IdEmpleado);
            //Empleado auxEmpleado = Empleado.getManager.GetOne();
            //txtID.Text = auxEmpleado.IdEmpleado.ToString();
            //txtNombre.Text = auxEmpleado.Nombre.Trim();
            //txtApellido.Text = auxEmpleado.Apellido.Trim();
            //txtCorreoElectronico.Text = auxEmpleado.CorreoElectronico.Trim();
            //txtDireccion.Text = auxEmpleado.Direccion.Trim();
            //txtFechaBaja.Text = auxEmpleado.FechaBaja.ToShortDateString();
            //txtLegajo.Text = auxEmpleado.Legajo.Trim();
            //txtNumeroDocumento.Text = auxEmpleado.NumeroDocumento.Trim();
            //txtTelefono.Text = auxEmpleado.Telefono.Trim();
            //TPPTipoDocumento.ItemSelected = auxEmpleado.TipoDocumento;

            //SetMode(PageMode.ViewMode);
        }
    }
    //protected void grdEmpleados_PageIndexChanging(object sender, GridViewPageEventArgs e)
    //{
    //    grdEmpleados.PageIndex = e.NewPageIndex;
    //    cargarGrilla();
    //}

    private void SetMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        switch (mode)
        {
            case PageMode.ListMode:
                grdEmpleados.Enabled = true;
                cmdBuscar.Enabled = true;
                cmdNuevo.Enabled = true;
                wzrABM.MoveTo(wzrABM.WizardSteps[0]);
                //wzrABM.ActiveStepIndex = 0;
                cmdDarBaja.Visible = false;
                break;
            case PageMode.NewMode:
                grdEmpleados.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                wzrABM.ActiveStepIndex = 1;
                txtID.Enabled = false;
                txtNombre.Enabled = true;
                txtApellido.Enabled = true;
                txtCorreoElectronico.Enabled = true;
                txtDireccion.Enabled = true;
                txtFechaBaja.Enabled = false;
                txtLegajo.Enabled = true;
                txtNumeroDocumento.Enabled = true;
                txtTelefono.Enabled = true;
                TPPTipoDocumento.Enable = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                cmdDarBaja.Visible = false;
                break;
            case PageMode.EditMode:
                grdEmpleados.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                //wzrABM.ActiveStepIndex = 1;
                wzrABM.MoveTo(wzrABM.WizardSteps[1]);
                txtID.Enabled = false;
                txtNombre.Enabled = true;
                txtApellido.Enabled = true;
                txtCorreoElectronico.Enabled = true;
                txtDireccion.Enabled = true;
                txtFechaBaja.Enabled = false;
                txtLegajo.Enabled = true;
                txtNumeroDocumento.Enabled = true;
                txtTelefono.Enabled = true;
                TPPTipoDocumento.Enable = true;
                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                cmdDarBaja.Visible = false;
                break;
            case PageMode.ViewMode:
                grdEmpleados.Enabled = false;
                cmdBuscar.Enabled = false;
                cmdNuevo.Enabled = false;
                //wzrABM.ActiveStepIndex = 1;
                wzrABM.MoveTo(wzrABM.WizardSteps[1]);

                txtID.Enabled = false;
                txtNombre.Enabled = false;
                txtApellido.Enabled = false;
                txtCorreoElectronico.Enabled = false;
                txtDireccion.Enabled = false;
                txtFechaBaja.Enabled = false;
                txtLegajo.Enabled = false;
                txtNumeroDocumento.Enabled = false;
                txtTelefono.Enabled = false;
                TPPTipoDocumento.Enable = false;

                txtID.ForeColor = System.Drawing.Color.Black;
                txtNombre.ForeColor = System.Drawing.Color.Black;
                txtApellido.ForeColor = System.Drawing.Color.Black;
                txtCorreoElectronico.ForeColor = System.Drawing.Color.Black;
                txtDireccion.ForeColor = System.Drawing.Color.Black;
                txtFechaBaja.ForeColor = System.Drawing.Color.Black;
                txtLegajo.ForeColor = System.Drawing.Color.Black;
                txtNumeroDocumento.ForeColor = System.Drawing.Color.Black;
                txtTelefono.ForeColor = System.Drawing.Color.Black;

                cmdAceptar.Visible = false;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = true;
                cmdEliminar.Enabled = true;

                if (txtFechaBaja.Text == "")
                {
                    cmdDarBaja.Visible = true;
                }
                else
                {
                    cmdDarBaja.Visible = false;
                }
                break;
        }

    }

    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);
        cargarGrilla();
    }

    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        //mensage confirmación
        Empleado auxEmpleado = new Empleado();
        auxEmpleado.IdEmpleado = int.Parse(txtID.Text.Trim());
        int res = Empleado.getManager.Delete(auxEmpleado);
        cargarGrilla();
        SetMode(PageMode.ListMode);
    }

    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        txtID.Text = "";
        txtNombre.Text = "";
        txtApellido.Text = "";
        txtCorreoElectronico.Text = "";
        txtDireccion.Text = "";
        txtFechaBaja.Text = "";
        txtLegajo.Text = "";
        txtNumeroDocumento.Text = "";
        txtTelefono.Text = "";
        TPPTipoDocumento.ItemSelected= null;
        SetMode(PageMode.NewMode);
    }

    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        try
        {
            Empleado auxEmpleado = new Empleado();
            auxEmpleado.Nombre = txtNombre.Text.Trim();
            auxEmpleado.Apellido = txtApellido.Text.Trim();
            auxEmpleado.CorreoElectronico = txtCorreoElectronico.Text.Trim();
            auxEmpleado.Direccion = txtDireccion.Text.Trim();
            auxEmpleado.FechaBaja = DateTime.MinValue;
            auxEmpleado.Legajo = txtLegajo.Text.Trim();
            auxEmpleado.NumeroDocumento = txtNumeroDocumento.Text.Trim();
            auxEmpleado.Telefono = txtTelefono.Text.Trim();
            auxEmpleado.TipoDocumento = (TipoDocumento) TPPTipoDocumento.ItemSelected;
            if (validar(auxEmpleado))
            {

                if (getMode() == PageMode.NewMode)
                {
                    if (Empleado.getManager.Insert(auxEmpleado) != true)
                    {
                        throw Empleado.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ListMode);
                }
                else
                {
                    auxEmpleado.IdEmpleado = int.Parse(txtID.Text.ToUpper().Trim());
                    if (Empleado.getManager.Update(auxEmpleado) != true)
                    {
                        throw Empleado.getManager.GeneratedException;
                    }
                    SetMode(PageMode.ViewMode);
                }
            }
            cargarGrilla();
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
    }
    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.ListMode);
    }

    private void InicializarGrilla()
    {
        DataControlField[] d= new DataControlField[2];

        ImageField colC = new ImageField();
        //colC.ButtonType = ButtonType.Image;
        //colC.CommandName = "mail";
        colC.DataImageUrlField = "idEmpleado";
        colC.HeaderText = "Email";
        colC.HeaderStyle.Width = 5;
        colC.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        d[0] =colC;

        ImageField colD = new ImageField();
        colD.DataImageUrlField = "FechaBaja";
        colD.HeaderText = "Estado";
        colD.HeaderStyle.Width = 5;
        colD.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        d[1] =colD;

        TecnopezDataGRIDABMView1.setupGrid<Empleado>(cargarGrilla, seleccionarEmpleado,grdEmpleados_RowDataBound, false,d, ViewState);

    }

    private bool validar(Empleado objeto)
    {
        ValidationResults v = Validation.Validate<Empleado>(objeto);
        if (!v.IsValid)
        {
            _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
        }
        return v.IsValid;

    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }

    protected void grdEmpleados_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        int IndiceEmail=0;
        int IndiceEstado=0;

        for(int celda= 0; celda<grdEmpleados.Columns.Count; celda++)
        {
            if (grdEmpleados.Columns[celda].HeaderText == "Email")
            {
                IndiceEmail = celda;
            }
            if (grdEmpleados.Columns[celda].HeaderText == "Estado")
            {
                IndiceEstado = celda;
            }
        }

        if (e.Row.DataItem != null)
        {
            Image img = (Image)e.Row.Cells[IndiceEmail].Controls[0];
            Image estado = (Image)e.Row.Cells[IndiceEstado].Controls[0];
            Empleado emp = (Empleado)e.Row.DataItem;
            if (emp.CorreoElectronico != null && emp.CorreoElectronico.Trim() != "")
            {
                img.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/email.gif";
                img.ToolTip = emp.CorreoElectronico;
                img.Style.Add("cursor", "hand");
                img.Attributes.Add("onclick", "javascript:mail('" + emp.CorreoElectronico + "')");
            }
            else
            {
                img.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/noemail.gif";
                img.Attributes.Add("onclick", "return false");
            }

            if (emp.FechaBaja == DateTime.MinValue)
            {
                estado.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/Activo.gif";
            }
            else
            {
                estado.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/Inactivo.gif";
            }
        }
    }
    protected void cmdDarBaja_Click(object sender, EventArgs e)
    {
        try
        {
            Empleado auxEmpleado = new Empleado();
            auxEmpleado.Nombre = txtNombre.Text.Trim();
            auxEmpleado.Apellido = txtApellido.Text.Trim();
            auxEmpleado.CorreoElectronico = txtCorreoElectronico.Text.Trim();
            auxEmpleado.Direccion = txtDireccion.Text.Trim();
            auxEmpleado.FechaBaja = DateTime.Today;
            auxEmpleado.Legajo = txtLegajo.Text.Trim();
            auxEmpleado.NumeroDocumento = txtNumeroDocumento.Text.Trim();
            auxEmpleado.Telefono = txtTelefono.Text.Trim();
            auxEmpleado.TipoDocumento = (TipoDocumento)TPPTipoDocumento.ItemSelected;
            if (validar(auxEmpleado))
            {
                auxEmpleado.IdEmpleado = int.Parse(txtID.Text.ToUpper().Trim());
                if (Empleado.getManager.Update(auxEmpleado) != true)
                {
                    throw Empleado.getManager.GeneratedException;
                }
                SetMode(PageMode.ViewMode);
            }
            cargarGrilla();
            txtFechaBaja.Text = auxEmpleado.FechaBaja.ToShortDateString();
        }
        catch (Exception exc)
        {
            _lblError.Text = "error: No se pudo realizar la operación";
            Functions.LogError(exc);
            SetMode(PageMode.NewMode);
        }
    }
}
